/**
 * 获取得分最高的题目评分结果
 * @param {string[]} answerList - 用户提交的答案列表（如["A"]）
 * @param {Object[]} questions - 题目列表（包含选项和结果属性）
 * @param {Object[]} questionResults - 所有评分结果（包含resultProp属性）
 * @returns {Object} 得分最高的评分结果
 */
export function getHighestScoringResult(answerList, questions, questionResults) {
  // 1. 构建题目选项的快速映射表（键值对提升查找效率）
  const questionMaps = questions.map(question => 
    question.options.reduce((map, opt) => {
      map[opt.key] = opt.result;
      return map;
    }, {})
  );

  // 2. 提取用户所有答案对应的结果属性（性能关键：O(n)时间复杂度）
  const userResults = answerList.map((key, index) => 
    questionMaps[index][key.toUpperCase()]
  );

  // 3. 遍历评分结果并计算得分（使用Set优化包含判断）
  let maxScore = -Infinity;
  let bestResult = null;

  for (const result of questionResults) {
    const propSet = new Set(result.resultProp); // Set的has方法复杂度O(1)
    let score = 0;
    
    // 累计用户每个结果在评分属性中的匹配次数
    for (const res of userResults) {
      if (propSet.has(res)) score++;
    }

    // 更新最高分结果（优先保留同分中首个结果）
    if (score > maxScore) {
      maxScore = score;
      bestResult = result;
    }
  }

  return bestResult;
}

/* 示例调用（用户选择A的情况）*/
const sampleAnswer = ["A"];
const sampleQuestions = [{
  title: "你通常更喜欢",
  options: [
    { result: "I", value: "独自工作", key: "A" },
    { result: "E", value: "与他人合作", key: "B" }
  ]
}];
const sampleResults = [{
  resultProp: ["I", "S", "T", "J"],
  resultDesc: "忠诚可靠，被公认为务实，注重细节。",
  resultPicture: "icon_url_istj",
  resultName: "ISTJ（物流师）"
}];

console.log(getHighestScoringResult(sampleAnswer, sampleQuestions, sampleResults));
